In recent years, a number of distributed storage system have been developed, commonly in the context of peer-to-peer (P2P) systems. The first generation of such P2P systems, e.g., Napster, Gnutella, etc., are all ‘read-only’ systems suitable for file sharing, that place less emphasis on availability and reliability of data and more emphasis on connectivity and name management (i.e., directory, search mechanisms, etc.).
Modern P2P storage systems have evolved to provide solutions to a variety of storage problems. For example, recent approaches to storage systems provide more extensive security, sharing, and archival capability. P2P storage systems typically store data in the form of objects. A particular problem typically encountered by P2P storage systems is the storage and retrieval of back-up copies of important objects (i.e., objects that contain critical data that must be available at all times, despite any connectivity issues or node failures). Conventionally, in order to address the issue of storing back-up copies of important objects, modern P2P storage systems employ some dedicated control (i.e., a deliberate process or service, such as a central entity) that is responsible for ensuring that important objects are replicated and multiple copies are stored on different nodes or elements in the P2P storage system. Thus, the dedicated control is responsible for ensuring that critical data stored in important objects is kept ‘alive’ (i.e., available at all times) in the P2P storage system. Typically, the dedicated control periodically checks the existence of the replicas of important objects. In some cases, if the dedicated control fails or is otherwise unable to function, the availability of critical data may be compromised.